assert関数は、プログラムの不良(バグ)摘出を支援します。引数の値が0の場合は、標準エラー出力にエラーメッセージを表示し、さらにabort関数を呼び出すことによって、プログラムを終了させます。なお、assert関数はマクロとして定義されています。
#include <assert.h>
void assert(int exp);
expは、値をチェックしたい変数を指定します。
assert関数は、NDEBUGマクロが定義されていた場合は何もしません。従って、次の例題の2行目のコメントを外すと、assert関数は無効になります。
プログラム 例
#include <stdio.h> /* #define NDEBUG */ #include <assert.h> int main(void) { int loop_cnt; int in_data; for (loop_cnt = 1; loop_cnt <= 5; ++loop_cnt) { printf('0以外の整数の値を入力してください ==> '); scanf('%d', &in_data); /* in_dataの値が0の場合、異常終了 */ assert(in_data); } return 0; }
例の実行結果
$ ./assert.exe 0以外の整数の値を入力してください ==> 1 0以外の整数の値を入力してください ==> 2 0以外の整数の値を入力してください ==> 3 0以外の整数の値を入力してください ==> 0 assert.exe: assert.c:15: main: Assertion `in_data' failed. アボートしました $